﻿using System;

namespace NDK.AcqDevice
{
    class Gocator
    {
    }
    public class DataContext
    {
        public double xResolution;
        public double yResolution;
        public double zResolution;
        public double xOffset;
        public double yOffset;
        public double zOffset;
        public uint serialNumber;
    }
    public struct SurfacePoints
    {
        public double x;
        public double y;
        public double z;
    }

    public struct GoPoints
    {
        public Int16 x;
        public Int16 y;
        public Int16 z;
    }
    public struct ProfilePoint
    {
        public double x;
        public double z;
        byte intensity;
    }
    enum kStatus
    {
        kERROR_STATE = -1000,                                                // Invalid state.
        kERROR_NOT_FOUND = -999,                                             // Item is not found.
        kERROR_COMMAND = -998,                                               // Command not recognized.
        kERROR_PARAMETER = -997,                                             // Parameter is invalid.
        kERROR_UNIMPLEMENTED = -996,                                         // Feature not implemented.
        kERROR_HANDLE = -995,                                                // Handle is invalid.
        kERROR_MEMORY = -994,                                                // Out of memory.
        kERROR_TIMEOUT = -993,                                               // Action timed out.
        kERROR_INCOMPLETE = -992,                                            // Buffer not large enough for data.
        kERROR_STREAM = -991,                                                // Error in stream.
        kERROR_CLOSED = -990,                                                // Resource is no longer avaiable. 
        kERROR_VERSION = -989,                                               // Invalid version number.
        kERROR_ABORT = -988,                                                 // Operation aborted.
        kERROR_ALREADY_EXISTS = -987,                                        // Conflicts with existing item.
        kERROR_NETWORK = -986,                                               // Network setup/resource error.
        kERROR_HEAP = -985,                                                  // Heap error (leak/double-free).
        kERROR_FORMAT = -984,                                                // Data parsing/formatting error. 
        kERROR_READ_ONLY = -983,                                             // Object is read-only (cannot be written).
        kERROR_WRITE_ONLY = -982,                                            // Object is write-only (cannot be read). 
        kERROR_BUSY = -981,                                                  // Agent is busy (cannot service request).
        kERROR_CONFLICT = -980,                                              // State conflicts with another object.
        kERROR_OS = -979,                                                    // Generic error reported by underlying OS.
        kERROR_DEVICE = -978,                                                // Hardware device error.
        kERROR_FULL = -977,                                                  // Resource is already fully utilized.
        kERROR_IN_PROGRESS = -976,                                           // Operation is in progress, but not yet complete.
        kERROR = 0,                                                          // General error. 
        kOK = 1                                                              // Operation successful. 
    }
    enum GoDataMessageTypes
    {
        GO_DATA_MESSAGE_TYPE_UNKNOWN = -1,
        GO_DATA_MESSAGE_TYPE_STAMP = 0,
        GO_DATA_MESSAGE_TYPE_HEALTH = 1,
        GO_DATA_MESSAGE_TYPE_VIDEO = 2,
        GO_DATA_MESSAGE_TYPE_RANGE = 3,
        GO_DATA_MESSAGE_TYPE_RANGE_INTENSITY = 4,
        GO_DATA_MESSAGE_TYPE_PROFILE = 5,
        GO_DATA_MESSAGE_TYPE_PROFILE_INTENSITY = 6,
        GO_DATA_MESSAGE_TYPE_RESAMPLED_PROFILE = 7,
        GO_DATA_MESSAGE_TYPE_SURFACE = 8,
        GO_DATA_MESSAGE_TYPE_SURFACE_INTENSITY = 9,
        GO_DATA_MESSAGE_TYPE_MEASUREMENT = 10,
        GO_DATA_MESSAGE_TYPE_ALIGNMENT = 11,
        GO_DATA_MESSAGE_TYPE_EXPOSURE_CAL = 12
    }

    enum GoOutputSource
    {
        GO_OUTPUT_SOURCE_NONE = 0,  ///< Unknown output source.
        GO_OUTPUT_SOURCE_VIDEO = 1,  ///< Output video data.
        GO_OUTPUT_SOURCE_RANGE = 2,  ///< Output range data.
        GO_OUTPUT_SOURCE_PROFILE = 3,  ///< Output profile data.
        GO_OUTPUT_SOURCE_SURFACE = 4,  ///< Output surface data.
        GO_OUTPUT_SOURCE_SECTION = 9,  ///< Output section data.
        GO_OUTPUT_SOURCE_RANGE_INTENSITY = 5,  ///< Output range intensity data.
        GO_OUTPUT_SOURCE_PROFILE_INTENSITY = 6,  ///< Output profile intensity data.
        GO_OUTPUT_SOURCE_SURFACE_INTENSITY = 7,  ///< Output surface intensity data.
        GO_OUTPUT_SOURCE_SECTION_INTENSITY = 10, ///< Output section intensity data.
        GO_OUTPUT_SOURCE_MEASUREMENT = 8, ///< Output measurement data.
        GO_OUTPUT_SOURCE_TRACHEID
    }
    enum GoRole
    {
        GO_ROLE_MAIN = 0,                                                    // Sensor is operating as a main sensor.
        GO_ROLE_BUDDY = 1                                                    // Sensor is operating as a buddy sensor.
    }
}
